/**
 * 格式化日期
 * @param {Date} date 日期对象
 * @param {string} format 格式模板，如 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) return '';
  
  if (typeof date === 'string') {
    date = new Date(date.replace(/-/g, '/'));
  }
  
  if (!(date instanceof Date) || isNaN(date)) {
    return '';
  }
  
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hour = date.getHours();
  const minute = date.getMinutes();
  const second = date.getSeconds();
  
  const padZero = (num) => (num < 10 ? `0${num}` : num);
  
  return format
    .replace(/YYYY/g, year)
    .replace(/MM/g, padZero(month))
    .replace(/DD/g, padZero(day))
    .replace(/HH/g, padZero(hour))
    .replace(/mm/g, padZero(minute))
    .replace(/ss/g, padZero(second));
}

/**
 * 获取日期差（以天为单位）
 * @param {Date} date1 日期1
 * @param {Date} date2 日期2
 * @returns {number} 相差的天数
 */
export function getDayDiff(date1, date2) {
  const time1 = new Date(date1).setHours(0, 0, 0, 0);
  const time2 = new Date(date2).setHours(0, 0, 0, 0);
  const diffTime = Math.abs(time2 - time1);
  return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}

/**
 * 获取友好的时间显示
 * @param {Date|string} date 日期
 * @returns {string} 友好的时间显示
 */
export function getFriendlyTime(date) {
  if (!date) return '';
  
  if (typeof date === 'string') {
    date = new Date(date.replace(/-/g, '/'));
  }
  
  const now = new Date();
  const diff = now.getTime() - date.getTime();
  
  // 小于1分钟
  if (diff < 60 * 1000) {
    return '刚刚';
  }
  
  // 小于1小时
  if (diff < 60 * 60 * 1000) {
    return `${Math.floor(diff / (60 * 1000))}分钟前`;
  }
  
  // 小于24小时
  if (diff < 24 * 60 * 60 * 1000) {
    return `${Math.floor(diff / (60 * 60 * 1000))}小时前`;
  }
  
  // 小于30天
  if (diff < 30 * 24 * 60 * 60 * 1000) {
    const days = Math.floor(diff / (24 * 60 * 60 * 1000));
    return days === 1 ? '昨天' : `${days}天前`;
  }
  
  // 大于30天
  return formatDate(date, 'YYYY-MM-DD');
} 